package com.ygp.core;

public class BitOperate {
    public static void main(String[] args) {
        System.out.println(5 << 2);
        System.out.println(Integer.toBinaryString(5));
        // 5的二进制             --> 0000 0000 0000 0000 0000 0000 0000 0101   = 5
        // 向左移动（低位补0）   --> 0000 0000 0000 0000 0000 0000 0001 0100   = 20
        System.out.println(5 >> 2);
        // 5的二进制             --> 0000 0000 0000 0000 0000 0000 0000 0101   = 5
        // 向右移动（高位补0）   --> 0000 0000 0000 0000 0000 0000 0000 0001   = 1

        // 1 << 4 、1 << 5、1 << 20 ------>    2^4、2^5、2^20


        // (h = key.hashCode()) ^ (h >>> 16)


        System.out.println(Integer.toBinaryString(-5));
        System.out.println(-5 >> 2);
        System.out.println(-5 >>> 2);
        System.out.println(Integer.toBinaryString(1073741822));
        // -5 二进制             11111111111111111111111111111011  =-5
        // 右移 用1进行补位      11111111111111111111111111111110  =-2
        // 无符号右移 用0补位    00111111111111111111111111111110  =1073741822
        //                         111111111111111111111111111110


        System.out.println(5 & 3); // 1
        System.out.println(Integer.toBinaryString(5));
        System.out.println(Integer.toBinaryString(3));
        // 5 ->                     101
        // 3 ->                     011
        //都是1 则为1 否则为0       001 = 1

        System.out.println(5 | 3); //7
        // 5 ->                     101
        // 3 ->                     011
        // 只要有一个是1 就为1      111 = 7

        System.out.println(5 ^ 3);
//        5转换为二进制：0000 0000 0000 0000 0000 0000 0000 0101
//        3转换为二进制：0000 0000 0000 0000 0000 0000 0000 0011
//        6转换为二进制：0000 0000 0000 0000 0000 0000 0000 0110
//        位异或：相同为0 不同为1


    }
}
